package com.psdi.physics;

import com.psdi.element.ElementObject;
import com.psdi.element.Position;
import com.psdi.element.Size;
import com.psdi.element.Tag;

import java.util.Set;

/**
 * 碰撞器接口
 * 定义了碰撞器的基本行为和属性
 * 包括获取碰撞器的大小、位置、标签、过滤标签等，以及处理碰撞持续时的行为
 * 所有要使用碰撞检测的元素对象都需要实现此接口
 */
public interface Collider {
    /**
     * 获取碰撞器的大小
     *
     * @return 碰撞器的大小
     */
    Size colliderSize();

    /**
     * 获取碰撞器的位置
     *
     * @return 碰撞器的位置
     */
    Position colliderPosition();

    /**
     * 获取碰撞器的标签
     *
     * @return 碰撞器的标签
     */
    Tag colliderTag();

    /**
     * 获取碰撞器的过滤标签
     * 用于决定是否跳过碰撞检测
     *
     * @return 碰撞器的过滤标签
     */
    Set<Tag> colliderFilterTag();

    /**
     * 碰撞持续时的处理方法
     *
     * @param other 发生碰撞的另一个元素对象
     */
    void onCollisionStay(ElementObject other);

    /**
     * 获取碰撞器的状态
     */
    boolean isAlive();
}
